package bean

// AiResp 模型响应结构体定义
type AiResp struct {
	Id        string    `json:"id,omitempty"`         // 智谱AI开放平台生成的任务序号，调用请求结果接口时请使用此序号
	Created   int64     `json:"created,omitempty"`    // 请求创建时间，为Unix时间戳，单位为秒
	Model     string    `json:"model,omitempty"`      // 当前对话的模型名称
	Choices   []Choice  `json:"choices,omitempty"`    // 当前对话的模型输出内容
	Usage     Usage     `json:"usage,omitempty"`      // 模型调用结束时返回的token使用统计
	WebSearch WebSearch `json:"web_search,omitempty"` // 返回与网页搜索相关的信息。icon
}

// Choice 当前对话的模型输出内容
type Choice struct {
	Index        int     `json:"index,omitempty"`         // 结果索引
	FinishReason string  `json:"finish_reason,omitempty"` // 模型推理终止的原因。'stop’表示自然结束或触发stop词，'tool_calls’表示模型命中函数，'length’表示达到token长度限制，'sensitive’表示内容被安全审核接口拦截（用户应判断并决定是否撤回公开内容），'network_error’表示模型推理异常
	Message      Message `json:"message,omitempty"`       // stream关闭：模型返回的文本消息
	Delta        Message `json:"delta,omitempty"`         // stream开启：模型增量返回的文本信息
}

type Message struct {
	Role       string     `json:"role,omitempty"`         // 当前对话角色，默认为’assistant’（模型）
	Content    string     `json:"content"`                // 当前对话内容。命中函数时为null，否则返回模型推理结果
	ToolCalls  []ToolCall `json:"tool_calls,omitempty"`   // 模型生成的应调用的函数名称和参数
	ToolCallId string     `json:"tool_call_id,omitempty"` // 工具调用的记录
}

// ToolCall 模型生成的应调用的函数名称和参数
type ToolCall struct {
	Id       string    `json:"id,omitempty"`       // 命中函数的唯一标识符
	Type     string    `json:"type,omitempty"`     // 模型调用的工具类型，目前仅支持’function’
	Function *Function `json:"function,omitempty"` // 包含模型生成的函数名称和JSON格式的参数
}

// Function 包含模型生成的函数名称和JSON格式的参数
type Function struct {
	Name      string `json:"name,omitempty"`      // 模型生成的函数名称
	Arguments string `json:"arguments,omitempty"` // 模型生成的函数调用参数的JSON格式。调用函数前请验证参数
}

// Usage 模型调用结束时返回的token使用统计
type Usage struct {
	PromptTokens     int `json:"prompt_tokens,omitempty"`     // 用户输入的token数量
	CompletionTokens int `json:"completion_tokens,omitempty"` // 模型输出的token数量
	TotalTokens      int `json:"total_tokens,omitempty"`      // 总token数量
}

// WebSearch 返回与网页搜索相关的信息。icon
type WebSearch struct {
	Icon    string `json:"icon,omitempty"`    // 来源网站的图标
	Title   string `json:"title,omitempty"`   // 搜索结果的标题
	Link    string `json:"link,omitempty"`    // 搜索结果的网页链接
	Media   string `json:"media,omitempty"`   // 搜索结果网页的媒体来源名称
	Content string `json:"content,omitempty"` // 搜索结果网页引用的文本内容
}
